<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
	
	/*
	 * Tuy nhiên, trong một số trường hợp chúng ta sẽ không thể lấy được thông tin từ getBaseUrl(). Nhất là với trường hợp cấu hình website phá vỡ kiến trúc chuẩn của Zend. Và lúc này bạn cần phải sử dụng controller để cấu hình điều hướng chính.
		
		Lúc này trong file bootstrap.php, chúng ta phải viết phương thức _initControllers(). Đây là phương thức cho phép chúng ta triệu gọi đầu tiên, thường được dùng để cấu hình controller.
		
	 */
	/*
	protected function _initControllers()
	{
		$frontController = Zend_Controller_Front::getInstance();
	
		$frontController->setBaseUrl('/projects/myapp');
	}
	*/
	
	
	public function _initAutoload(){
		$front = Zend_Controller_Front::getInstance();
		
		
		
		
		/*
		 Sau khi tạo module Error, cần khai báo cho hệ thống biết.
		Khi các module khác bị lỗi, thì sẽ gọi module error này ra để thể hiện thông báo lỗi.
		Để làm được điều này, mở file bootstrap.php ở thư mục application và thêm vào 1 phương thức như sau
		*/
		$front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(array(
				'module'     => 'error',
				'controller' => 'error',
				'action'     => 'error'
		)));
		
		/*
		 * phương thức autoload để định nghĩa cho hệ thống biết được đường dẫn tới các lớp mà ta tạo trong Model và form sau này.
		 *  
		 */
		$autoloader = new Zend_Application_Module_Autoloader(array(
				'namespace' => '',
				'basePath' => dirname(__FILE__),
		));
		return $autoloader;
	}
	
	/* Đây là phương thức sẽ được triệu gọi khi chạy ứng dụng. 
	 * 
	 * Tại đây, ta lấy thông tin kết nối từ nội dung đã cấu hình ở file application.ini.
	 * 
	 */
	protected function _initDatabase(){
		$db = $this->getPluginResource('db')->getDbAdapter();
		Zend_Registry::set('db', $db);
	}
	
	
	/**
	 * 
	 */
	protected function _initMultiDb(){
		// get params on resource
		$resource = $this->getPluginResource('multidb');
		$resource->init();
		//set Config in Registry (dat ten la config),  config nay se dc load lai trong hieulib/Db/Table
		Zend_Registry::set('Config',$resource);		 
	}
	
	
	
	/**
	 * khoi tao session
	 */
	protected function _initSession(){
		Zend_Session::start();
	}
	
	//su dung cache
	/*
	 * Phân loại cache trong Zend_Cache:
	frontEnd: cache các đối tượng như:
	Output: cache tất cả mọi thứ giữa phương thức start() và phương thức end()
	Function: cache kết quả của việc gọi phương thức sử dụng phương thức call() để lấy tên phương thức và các tham số của phương thức.
	File: cache kết quả ra file
	Page: cache toàn bộ một trang web
	…
	backEnd: các kiểu cache như:
	File: lưu ra file
	Memcached: lưu trên RAM	
	
	Một ứng dụng có thể cần nhiều kiểu cache khác nhau. Nếu chúng ta sử dụng cache trong các controller thì không được tối ưu (khai báo mỗi khi sử dụng) và việc sử dụng lại các kiểu cache đó trong các controller khác khá khó khăn.

Do đó, Cache Manager (khai báo trong file bootstrap) được sử dụng để quản lý các kiểu cache trong ứng dụng đồng thời làm cho việc sử dụng cache trong các phần khác nhau của ứng dụng trở nên dễ dàng hơn.

Cache Manager quản lý các kiểu cache bằng các template (mẫu).

để xem cách sử dụng Zend_Cache_Manager,  tham khảo action default/IndexController/listAction


	 */
	protected function _initCachemanager(){
		$cacheManager=new Zend_Cache_Manager;
		$dbcache=array(            //bắt đầu khai báo template
				'frontend'=>array(
						'name'=>'Core',
						'options'=>array(
								'lifetime'=>null,
								'automatic_serialization'=>'true',
						),
				),
				'backend'=>array(
						'name'=>'File',
						'options'=>array(
								'cache_dir'=>CACHE_DIR,
						),
				),
		);              
		 //kết thúc khai báo template
		$cacheManager->setCacheTemplate('dbcache',$dbcache); //gán template $dbcache với tên là dbcache
		return $cacheManager;
	}
	
	//cach dung Zend Cache
	//xem cach goi va thiet lap trong model/User.php/listuser4
	protected function _initCache(){
		$frontend= array(
				"lifetime" => 72000,
				"automatic_serialization" => 1  //dat kieu true(false) thi ko nhan ???
		);
		
		$backend= array("cache_dir" => CACHE_DIR);
		
		$cache = Zend_Cache::factory("core","File", $frontend,$backend);
		
		Zend_Registry::set(‘cache’,$cache);
	}
	
	protected function _initLoadPlugin(){
		$front = Zend_Controller_Front::getInstance();
		$front->registerPlugin(new hieulib_System_Plugin());
	
	
	}
	
	
	
}